<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 周名霞 229971345 -->
    <script>
        //实验一
        let a1,b1,c1 = [1,2,3,];
        console.log(a1,b1,c1);//输出undefined，JS的解构赋值不允许同时声明多个变量，并直接赋值给一个数组

        let [a2,b2,c2] = [1,2,3,];
        console.log(a2,b2,c2);//输出123，数组解构赋值

        let [a3,b3,c3] = [1,,3,];
        console.log(a3,b3,c3);//输出1 undefined 3，数组解构赋值，b3的位置是逗号，表示b3被赋值为undefined

        let [a4,b4] = [1];
        console.log(a4,b4);//输出1 undefined,将数组[1]解构到a4,b4中，a4被赋值1，b4被赋值undefined

        let {y:a5,b5} = {x:1,y:2};
        console.log(a5,b5);//输出2 undefined,对象解构赋值，a5重命名从对象y属性获取值，b5获取同名属性值，而对象中无b5属性

        let {a6,b6} = 123;
        console.log(a6,b6);//报错，对象解构赋值只能用于对象，而这里对一个数字进行了解构
    </script>

    <script>
        //实验二
        let set = new Set();
        set.add(1);
        set.add(2);
        set.add(3);
        set.delete(2);
        
        let i = set.values();
        console.log(i.next());
        console.log(i.next());
        console.log(i.next());
        //结果{value: 1, done: false}
        //{value: 3, done: false}
        //{value: undefined, done: true}
    </script>

    <script>
        //实验三
        let map = new Map();
         map.set(1,"a");
         map.set(2,"b");
         map.set(3,"c");
         map.set(4,"d");
        for(let i = 1;i <= map.size;i++){
        console.log(map.get(i));
        }
        map.forEach(function(value,key){
        console.log(value);
        });
        for(let v of map.values()){
              console.log(v);
        }
        for(var prop in map){
             console.log(prop);
        }
    </script>

    <script>
        //实验四
        let arr1 = [1,2,3];
        let arr2 = arr1;console.log(arr1 == arr2);
        let arr3 = [...arr1];console.log(arr1 == arr3);
        //结果为true false
    </script>

    <script>
        //实验五
        let arr4 = [1,2,3];
        arr4.forEach(function(v,k){
        console.log(v);
        })
        //let arr4 = [1, 2, 3];
        //arr4.forEach((v, k) => console.log(v));
    </script>

    <script>
        //实验六
        Array.of(1,2,3).filter(i => i > 1).forEach(i => console.log(i));
        //Array.of(1,2,3): 使用Array.of方法创建一个包含数字1、2和3的数组。
        //.filter(i=>i>1): 使用filter方法过滤数组中的元素。i=>i>1是一个箭头函数，表示保留那些大于1的元素。因此，经过filter方法后，数组变为[2, 3]。
        //.forEach(i=>console.log(i)): 使用forEach方法遍历过滤后的数组。i=>console.log(i)是一个箭头函数，表示对数组中的每个元素执行console.log操作。
        let fib = n=> n > 1?fib(n -1) + fib(n - 2):n;
        //定义了一个名为fib的函数，用于计算斐波那契数列中的第n个数。
    </script>

    <script>
        //实验七
        class Animal {
        constructor(name) {
            this.name = name;
        }

        shout() {
            console.log(`${this.name} shouts!`);
        }
        }

        class Dog extends Animal {
        constructor(name, age) {
            super(name); // 调用父类的构造函数
            this.age = age;
        }

        eat() {
            console.log(`${this.name} eats food.`);
        }
        }

        // 测试代码
        const dog = new Dog('Buddy', 3);
        console.log(dog.name); // 输出：Buddy
        console.log(dog.age); // 输出：3
        dog.shout(); // 输出：Buddy shouts!
        dog.eat(); // 输出：Buddy eats food.
    </script>
</body>
</html>